﻿using System;
using System.Collections;
using System.Linq;
using System.Text;
using Proyecto7CAD;
using System.Data;
using System.Configuration;
using System.Data.Sql;
using System.Data.Common;
using System.Data.SqlClient;
using System.Data.SqlTypes;
using System.Collections;

namespace ENProyecto7
{
    public class ENMapa
    {
        // declaraciones de las variables
        private int idMapa;
        private string nombreMapa;
        private string descripcionMapa;
        private string imagenMapa;
        private ArrayList localizaciones;
        private MapaCAD obj;

        public ENMapa()
        {
            idMapa = 0;
            nombreMapa = "";
            descripcionMapa = "";
            imagenMapa = "";
            localizaciones = new ArrayList();
            obj = new MapaCAD();
        }

        // Constructor sobrecargado
        public ENMapa(string newName, string newDesc = "", string newImage = "")
        {
            nombreMapa = newName;
            descripcionMapa = newDesc;
            imagenMapa = newImage;
            obj = new MapaCAD();
        }

        public int IdMapa
        {
            get { return idMapa; }
            set { idMapa = value; }
        }

        public string NombreMapa
        {
            get { return (nombreMapa); }
            set { nombreMapa = value; }
        }

        public string DescripcionMapa
        {
            get { return (descripcionMapa); }
            set { descripcionMapa = value; }
        }

        public string ImagenMapa
        {
            get { return (imagenMapa); }
            set { imagenMapa = value; }
        }

        public ArrayList LocalizacionesMapa
        {
            get { return (localizaciones); }
            set { localizaciones = value; }
        }

        //Métodos de la clase

        //Insertar un mapa
        public void insertarMapa()
        {
            try
            {
                obj.insertarMapa(nombreMapa, imagenMapa, descripcionMapa);

                int ultimoID = obj.obtenerUltimoIDMapa();

                foreach (ENMapaLocalizacion item in localizaciones)
                {
                    obj.insertarLocalizacionMapa(ultimoID, item.IDLocalizacion, item.CordX, item.CordY);
                }
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }

        //Devuelve el mapa (y las localizaciones asociadas) que se pide por id
        public void obtenerMapa()
        {
            try
            {
                DataTable tabla = obj.obtenerMapa(idMapa);
                nombreMapa = tabla.Rows[0][1].ToString();
                imagenMapa = tabla.Rows[0][2].ToString();
                descripcionMapa = tabla.Rows[0][3].ToString();

                DataTable tablalocalizacion = obj.obtenerLocalizacionMapa(idMapa);
                LocalizacionCAD cadlocalizacion = new LocalizacionCAD();

                foreach(DataRow registro in tablalocalizacion.Rows){
                    ENMapaLocalizacion item = new ENMapaLocalizacion();

                    item.IDLocalizacion = int.Parse(registro[1].ToString());
                    item.CordX = int.Parse(registro[2].ToString());
                    item.CordY = int.Parse(registro[3].ToString());
                    item.Nombre = cadlocalizacion.obtenerNombreLocalizacion(item.IDLocalizacion);

                    localizaciones.Add(item);
                }
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }

        //Obtiene todos los mapas de la base de datos
        public DataTable obtenerMapas()
        {
            try
            {
                return obj.obtenerMapas();
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }

        //Edita un mapa
        public void editarMapa()
        {
            try
            {
                obj.editarMapa(idMapa, nombreMapa, imagenMapa, descripcionMapa);
                //Borramos los registros en MapaLocalizacion para volver a insertarlos(con los que el usuario ha añadido)
                obj.borrarLocalizacionMapa(idMapa);

                foreach (ENMapaLocalizacion item in localizaciones)
                {
                    obj.insertarLocalizacionMapa(idMapa, item.IDLocalizacion, item.CordX, item.CordY);
                }

            }
            catch (Exception ex)
            {
                throw ex;
            }
        }

        //Borra un mapa
        public void borrarMapa()
        {
            try
            {
                obj.borrarMapa(idMapa);
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }

        //Busca un mapa por nombre o por descripcion
        public DataTable obtenerMapaNombre(string nom_des)
        {
            try
            {
                return obj.obtenerMapaNombre(NombreMapa, nom_des);
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }

        //Suputamadre esto que no se guarda
        public DataTable obtenerLocalizacionesMapa()
        {
            try
            {
                return obj.obtenerLocalizacionesMapa(idMapa).Tables["mapa"];
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }

        public SqlDataReader obtenerLocalizacionMapa()
        {
            try
            {
                return obj.obtenerLocalizacionMapaCAD(idMapa);
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }
    }
}
